<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 什么是闭包 ? 面试题
        // 定义: 内层函数引用外层函数的变量的集合 
        //===>闭包=内层函数+外层函数的变量
        // 条件:
        // 1．首先要有内层函数
        // 2．内层函数使用了外层函数的变量
        // (外层函数就相当于把这个整体包裹起来了，所以叫闭包)
        //简单的写法:

        //闭包的作用:通过闭包,让外部可以访问函数内部的变量

        function outer {
            let a = 10
            function fn() {
                console.log(a)
            }
            //fn()
            return fn
        }
        // outer() === fn ==>function fn(){console.log(a)}
        const fun = outer
        //const fun= function fn(){
            // console.log(a)
            // }
            // ==>我们在外部调用fun的时候，相当于执行上面注释的函数,执行到log (a) ,找的是outer函数内部的变量a
            fun()


            function outer (){
                let a = 10
                return function(){
                    console.log(a);
                }
            }
            const fn = outer()
            // const fn = function(){
            //     console.log(a);
            // }
            // fn()  调用函数 

    </script>
</body>

</html>